<?php
/**
 * 記憶装置基底クラス
 */
require_once dirname(__FILE__) . '/../object.php';

/**
 * 記憶装置基底クラス
 * プログラム論理構造に組み込むために、アプリケーション毎のIDを設定する
 * アプリケーション名がユニークになるようにプログラムが配慮することで
 * アプリケーション間での装置競合を防ぐ
 */
abstract  class Storage extends object
{
	/** アプリケーション名 */
	protected $_applicationName;
	/** 必須メソッド：取り出し */
	abstract public function fetch($label);
	/** 必須メソッド：保存 */
	abstract public function store($label, $value);
	/** 必須メソッド：更新ロックが必要なストレージの場合TRUEを返す */
	abstract public function needLock($label);
	/** 必須メソッド：更新ロック中の場合、TRUEを返す。更新ロック不要の場合常にFALSEを返す */
	abstract public function isLock();
	/** 必須メソッド：更新ロック開始処理。更新ロック不要の場合、TRUEを返すだけ */
	abstract public function lock();
	/** 必須メソッド：アンロック処理。更新ロック不要の場合、TRUEを返すだけ */
	abstract public function unLock();

	/**
	 * コンストラクタ
	 * @param $applicationName
	 */
	public function __construct($applicationName)
	{
		$this->_applicationName = $applicationName;
		parent::__construct();
	}
}